<?php
/** Copyright 2014 TinPhp Systems, Inc.
 * @author zhangxilian 2013-8-20
 * @package TinPhp
 */
if (!defined('IN_TINPHP')) {
	exit ('Access Denied');
}
require_once (TIN_APP_PATH . "include/TinLogGer.php");
require_once ("DB.php");
require_once ("exception/DBException.php");
require_once ('TinAppConf.php');
require_once ('ModuleFactory.php');
require_once ('TinDataMap.php');
require_once ('dao/TinDaoBase.php');
/** TinPHP框架基础类 */
class Tin {
	/**
	 * 加载并创建对应类
	 * @param string $type Module类枚举
	 * @param string $name 对应类名称
	 * */
	public static function loadModule($type, $name) {
		return ModuleFactory::load($type, $name);
	}
	/** 创建空的View数据类对象 */
	public static function createDataMap() {
		return new TinDataMap();
	}
	/**
	 * [可选]创建DAO数据操作类
	 * @param string $viewObj Model表视图类
	 * */
	public static function getViewDAO($viewObj){
        $dbType = $viewObj->db_type;
        require_once 'dao/TinDao_'.$dbType.'.php';
        $dbClassName = 'TinDao_'.ucfirst($dbType);
		return new $dbClassName (DBFactory::getDBConn($dbType), $viewObj);
	}
	/**
	 * 创建DAO数据操作类
	 * @param string $viewName 对应类名，系统支持的有默认的 AssignTable,但$table必须指定数据表名称
	 * @param string $table 对应数据库表名。
	 * @param string $keyName 表关键字段名，默认ID
     * @param string $seqOff 默认开启SEQ序列,off为关闭
	 * @param string $dbType 数据库对象类型，默认使用配置文档内的TIN_DB_TYPE
     * @param string $dbConnKey 指定数据链接对象Key，建议不默认
     * @return DAO对象
	 * */
	public static function getDAO($viewName, $table, $keyName="ID", $seqOff="on", $dbType = TIN_DB_TYPE, $dbConnKey = null) {
		$viewCla = self::getViewHelper($viewName, $table, $keyName, $seqOff, $dbType);
		require_once 'dao/TinDao_'.$dbType.'.php';
		$dbClassName = 'TinDao_'.ucfirst($dbType);
		if($dbConnKey==null) $dbConnKey = $dbType;
		return new $dbClassName (DBFactory::getDBConn($dbConnKey), $viewCla);		
	}
	/**
	 * 加载并创建Model表视图类
	 * @param string $viewName 表视图文件名
	 * @param string $table 数据库实际表名称
	 * @param string $keyName 数据库表名对应的主键字段名
     * @param string $seqOff 默认开启SEQ序列,off为关闭
     * @param string $dbType 数据库对象类型，默认使用配置文档内的TIN_DB_TYPE
	 * */
	public static function getViewHelper($viewName, $table, $keyName=null, $seqOff="on", $dbType = TIN_DB_TYPE) {
		$classPath = "app/view/" . $viewName . ".php";
		require_once (TIN_APP_PATH . $classPath);
		if($table==null && $keyName==null){
			return new $viewName();
		}else{
			return new $viewName($table, $keyName, $seqOff, $dbType);
		}
	}	
	/** 测试 */
	public static function info() {
		return "TinPHP Systems class Tin info";
	}

}
?>
